首先来看这个方法:
  | 
  | 
下面这个是常见的 init 创建线程:
  | 
  | 
这两种创建方式有哪些不同呢?我们对比来看下:
init是一个构造器,detachNewThreadSelector是一个类型方法。detachNewThreadSelector返回值是void,也就是说没有返回值。detachNewThreadSelector在调用后立即启动,不需要start方法。
下面我们来使用这个方法,在 TouchesBegan 方法中写入:
  | 
  | 
创建 run 方法:
  | 
  | 
现在我们就可以调用这个线程了。
detachNewThread 这个类型方法没有返回值,这意味着我们不能像使用 init 构造器创建那样,使用start exit name stackSize 那样控制线程启动、关闭、命名、获取栈大小,也无法使用 currentThread  mainThread  isMainThread  threadPriority 进行获取当前线程、获取主线程、指定优先级等操作。
最后一种方法是 selectorInBackground ,从名字可以看出来,这是在在后台执行一个相应函数,与 deathNewThread 和 init 不同,selectorInbackground 是 Object 的实例方法,没有返回值,因此它同样不能对线程进行控制。这个方法的表达式如下:
  | 
  | 
通过上面的对比,我们可以得出结论,同 init 这种方式对比,detachNewThread 和 performSelectorBackgroud 无法对创建的线程进行命名、比较、设定优先级等操作。